/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package negocio;

import datos.Programa;
import java.util.List;
import javax.ejb.Local;

/**
 *
 * @author Ing. Monica Merlo, Ing. Agustin  Fernandez
 */
@Local
public interface GestorProgramaLocal {

    /***
     * Retorna una lista con todas las instancias de tipo Programa, en
     * caso contrario retorna Null.
     * @return listado de todos los programas de construcción de obra
     * almacenados en la Base de Datos, ordenados por nombre
     * Interfaz local
     */
    public List consultarPrograma();

    /***
     * Retorna una lista con todos los nombres de las instancias de Programa,
     * en caso contrario retorna Null.
     * @return una lista de todos los nombres de los programas ordenados, null en caso contrario
     * Interfaz local
     */
    public List programas();

    /***
     * Retorna un objeto de tipo Programa cuyo nombre cuyo nombre
     * coincide con el parametro nombre, en caso contrario retorna Null.
     * @param nombre
     * @return un programa en particular definido, su nombre, previamente en la UI
     * Interfaz local
     */
    public Programa encontrarPrograma(String nombre);

    /***
     * Crea una nueva instancia de tipo Programa, reornando True en caso de exito
     * y False en caso contrario.
     * @param programa
     * @return true en el caso de que la nueva instancia de la clase Programa haya sido almacenada con éxito,
     * false en caso de que la nueva instancia de la clase Programa no haya sido almacenada con éxito,
     * Interfaz local
     */
    public boolean agregarPrograma(Programa programa);

    /***
     * Busca la instancia de tipo Programa que se desea actualizar, y una
     * vez encontrada se actualizan sus atributos, retornando True en caso de
     * exito y False en caso contrario.
     * @param programa
     * @return true en el caso de que la instancia de la clase Programa haya sido modificada
     * y almacenada con éxito, previamente encontrada a través de su ID. False en caso contrario.
     * Interfaz local
     */
    public boolean modificarPrograma(Programa programa);

    /***
     * Elimina una instancia de tipo Programa, retornando True en caso de exito
     * y False en caso contrario.
     * @param programa
     * @return true en caso de encontrar el objeto de tipo Programa a través de su ID,
     * y removerlo de forma física de la Base de Datos. False en caso contrario.
     * Interfaz local
     */
    public boolean eliminarPrograma(Programa programa);

    /***
     * Valida que no existan dos instancias de tipo Programa con el mismo nombre.
     * Retornando True en caso de exito y False en caso contrario.
     * @param programa
     * @return true en caso de que el objeto haya sido encontrado en la Base de datos por su ID y nombre
     * Interfaz local
     */
    public boolean existeNombreProgramaModificar(Programa programa);

    /***
     * Valida que no existan dos instancias de tipo Programa con el mismo nombre.
     * @param programa
     * @return true en caso de que el objeto haya sido encontrado por su nombre y false en caso contrario
     * Interfaz local
     */
    public boolean existeNombrePrograma(Programa programa);

     /***
     * Valida si alguna instancia de Obra tiene asignado algun programa, retorna True
     * en caso de exito y False en caso contrario.
     * @param idPrograma
     * @return true en caso de que alguna obra tenga asignado el programa, y false en caso contrario.
     * Interfaz local
     */
    public boolean programaFueAsignadoObras(int idPrograma);
}
